package network_programming.np1_socket_and_serversocket;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;

/**
 * NetworkInterface类表示物理上的网络接口
 * 有两种构造自身实例的静态工厂方法，都声明抛出SocketException
 * getByName(String name)   参数name指定网络接口名，如果不存在域接口名对应的网络接口则返回null
 * getByInetAddress(InetAddress address)    参数address指定网络接口的ip地址，
 *                                          如果不存在域ip地址对应的网络接口则返回null
 *
 * 静态方法
 * getNetworkInterfaces()    返回本地主机上的所有网络接口
 *
 * 实例方法
 * public String getName()  返回网络接口名
 * public Enumeration getInetAddresses()    返回和网络接口绑定的所有ip地址
 * */
public class NetworkInterfaceDemo {
    public void test() {
        try {
            // 创建名字为“eth0”的网络接口
            NetworkInterface ni1 = NetworkInterface.getByName("eth0");

            InetAddress localAddress = InetAddress.getByName("127.0.0.1");
            // 创建本地主机上的网络接口
            NetworkInterface ni2 = NetworkInterface.getByInetAddress(localAddress);

            Enumeration<NetworkInterface> enu = NetworkInterface.getNetworkInterfaces();
            while(enu.hasMoreElements()) {
                NetworkInterface ni = enu.nextElement();
                System.out.println(ni);
                Enumeration<InetAddress> eia = ni.getInetAddresses();
                while(eia.hasMoreElements()) {
                    System.out.println("    " + eia.nextElement());
                }
                System.out.println();
            }
        } catch (SocketException | UnknownHostException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new NetworkInterfaceDemo().test();
    }
}
